export interface IGauge {
  moduleName: string; // 模块名
  subjects: ISubjectV[];
  subjectShowStatus?: ISubjectShow; // 小模块下题目的显示状态
  isShow: boolean; // 小模块显示状态太
  explain?: string; // 说明
  domTop?: number; // 到顶部的距离
  domHeight?: number; // 元素的高度 用于计算是否还在该模块内
  isReadLastSurvey?: boolean; // 是否读取上次访视
}

export interface ISubjectShow {
  [key: string]: boolean; // key 为题目的字段，值为题目的显示状态
}
export interface IAllGauge {
  menuIChild?: number; // 记录当前位置
  moduleChildrens: IGauge[];
  // tslint:disable-next-line:no-any
  position: IPosition; // 用来记录坐标位置
  moduleName: string; // 模块名
  // tslint:disable-next-line:no-any
  isError: any;
  isShow?: boolean; // 大模块是否显示 不填就是不显示
}

export interface ISubject {
  // tslint:disable-next-line:no-any
  [key: string]: any; // 该字段临时使用 时刻准备干掉
  // tslint:disable-next-line:no-any
  countNumData: any; // 这道题目的key val 组合
  isGroupChildren?: boolean; // 临时使用 判断复合组件子组件
  subjectName: string; // 题目名
  subjectType: string; // 空间类型
  // tslint:disable-next-line:no-any
  defaultValue: any; // 默认值 回显也用这个字段
  field: string; // 字段名
  placeholder?: string;
  errMsg?: string; // 报错信息
  disable?: boolean; // 是否禁用
  explain?: string; // 说明
  size?: string; // 输入框宽度 只有input时有效
  // tslint:disable-next-line:no-any
  marks?: { [key: number]: any }; // slider 刻度 只有slider时管用
  // tslint:disable-next-line:no-any
  sliderMax?: number; // slider 最小值
  sliderMin?: number; // slider 最大值
  radios?: IRadio[]; // 单选框循环数组
  checkboxs?: ICheckbox[]; // 多选循环数组
  // tslint:disable-next-line:no-any
  visibleIf?: string; // 是否显示 默认不显示
  // tslint:disable-next-line:no-any
  unit?: string; // 只有时FormNumInput和 FormCountDate 的时候才会有用，单位
  threshold?: number[]; // 只有时FormNumInput 的时候才会有用，区间范围，大于最大的上 小于最小的下，在中间没有箭头
  selectOpts?: ISeleOpt[]; // 只有时下拉框 的时候才会有用
  formula?: string; // 计算公式，只有分数的时候才会显示
  arrMark?: string; // 只有是分数的时候才会出现，如果答案是个数组，数组里面的计算规则 目前只支持单一运算
  imgUrl?: string; // 图片地址
  otherInput?: string; // 只有多选框才会出现 允许输入内容 输入的内容将会push到数组中
  step?: number; // 只有滑块才会出现，滑块移动一下的距离
  showStatus?: boolean; // 当前组件状态
  groupChildrens?: [ISubjectV[]?]; // 复合组件的子组件,这里是个二维数组，方便进行删除或者修改
  // tslint:disable-next-line:no-any
  initGroupChildrens?: ISubjectV[];
  parentPosition?: IParentPosition;
  customWordsKey?: string; // 只有FormAloneDate时才会出现 自定义一个选项
  customWordsVal?: string; // 只有FormAloneDate时才会出现 自定义一个选项的值 用来算分或者条件隐藏
  decimalNum?: number; // 保留几位小数
  patientRequired?: string; // 患者是否必填
}
export interface IParentPosition {
  menuIChild: number;
  menuIndex: number;
  subjectIndex: number;
  groupChildrenIndex?: number; // 当前复合组件里面小组件的位置
  groupIndex?: number; // 当前这一组的位置
  errMsg?: string;
}
export interface ISeleOpt {
  name: string;
  value: string | number;
}
export interface IPosition {
  [key: string]: IPosititonInfo;
}
export interface IPosititonInfo {
  menuIChild: number;
  menuIndex: number;
  subjectIndex: number;
  errMsg?: string;
  fieldChildren?: string;
  childrenIndex?: number;
}
export interface IRadio {
  value: string;
  name: string;
}
export interface ICheckbox {
  value: string;
  label: string;
}
export interface ISubjectV {
  roleShowStatus: boolean;
  roleTypes?: string[]; // 题目权限 只有符合该权限 才会出现，会在初始阶段判断 1 医生 0 患者 不传就是两者都有
  visitNumbers?: string[]; // 则visitNumbers里面有-1 则里面的代表排除的 如果没有 则代表包含的 不传就是全部
  // tslint:disable-next-line:no-any
  validatorData: any;
  subjectData: ISubject;
}
